// @ts-ignore
import {UserConfig, ConfigEnv, loadEnv, defineConfig} from "vite";
import vue from '@vitejs/plugin-vue'
// @ts-ignore
import vueJsx from "@vitejs/plugin-vue-jsx";

// @ts-ignore
import AutoImport from "unplugin-auto-import/vite";
// @ts-ignore
import Components from "unplugin-vue-components/vite";
import { resolve } from "path";
import {
    name,
    version,
    dependencies,
    devDependencies,
} from "./package.json";

/** 平台的名称、版本、运行所需的`node`版本、依赖、构建时间的类型提示 */
const __APP_INFO__ = {
    pkg: {name, version, dependencies, devDependencies},
    buildTimestamp: Date.now(),
};

const pathSrc = resolve(__dirname, "src");

// https://vite.dev/config/
export default defineConfig(({mode}: ConfigEnv): UserConfig => {
    const env = loadEnv(mode, process.cwd());
    return {
        base: env.VITE_APP_PREFIX_URL, // 添加 base 选项，为url自动添加前缀
        resolve: {
            alias: {
                "@": pathSrc,
            },
        },
        plugins: [
            vue(),
            // jsx、tsx语法支持
            vueJsx(),
            // MOCK 服务
            null,
            // 自动导入参考： https://github.com/sxzz/element-plus-best-practices/blob/main/vite.config.ts
            AutoImport({
                // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
                imports: ["vue", "@vueuse/core", "pinia", "vue-router"],
                resolvers: [],
                eslintrc: {
                    // 是否自动生成 eslint 规则，建议生成之后设置 false
                    enabled: false,
                    // 指定自动导入函数 eslint 规则的文件
                    filepath: "./.eslintrc-auto-import.json",
                    globalsPropValue: true,
                },
                // 是否在 vue 模板中自动导入
                vueTemplate: true,
                // 指定自动导入函数TS类型声明文件路径 (false:关闭自动生成)
                dts: false,
                // dts: "src/typings/auto-imports.d.ts",
            }),
            Components({
                resolvers: [],
                // 指定自定义组件位置(默认:src/components)
                dirs: ["src/components", "src/**/components"],
                // 指定自动导入组件TS类型声明文件路径 (false:关闭自动生成)
                dts: false,
                // dts: "src/typings/components.d.ts",
            }),
        ],
        // 防止 Vite 清除 Rust 显示的错误
        clearScreen: false,
        server: {
            // Tauri 工作于固定端口，如果端口不可用则报错
            strictPort: true,
            // 如果设置了 host，Tauri 则会使用
            host: false,
            port: 5173,
        },
        // 添加有关当前构建目标的额外前缀，使这些 CLI 设置的 Tauri 环境变量可以在客户端代码中访问
        envPrefix: ['VITE_', 'TAURI_ENV_*'],
        build: {
            // Tauri 在 Windows 上使用 Chromium，在 macOS 和 Linux 上使用 WebKit
            target:
                process.env.TAURI_ENV_PLATFORM == 'windows'
                    ? 'chrome105'
                    : 'safari13',
            // 在 debug 构建中不使用 minify
            minify: !process.env.TAURI_ENV_DEBUG ? 'esbuild' : false,
            // 在 debug 构建中生成 sourcemap
            sourcemap: !!process.env.TAURI_ENV_DEBUG,
        },
        define: {
            __APP_INFO__: JSON.stringify(__APP_INFO__),
        },
    };
})
